#ifndef xpack_meta_remove_volatile
#define xpack_meta_remove_volatile
#pragma push_macro("xuser")
#undef  xuser
#define xuser mixc::meta_remove_volatile::inc
#include"define/base_type.hpp"
#include"macro/xexport.hpp"
#pragma pop_macro("xuser")

namespace mixc::meta_remove_volatile{
    template<class type_t>
    struct meta {
        using result = type_t;
    };

    template<class type_t>
    struct meta<volatile type_t> {
        using result = type_t;
    };

    template<class type_t>
    struct meta<volatile type_t *> {
        using result = type_t *;
    };

    template<class type_t>
    struct meta<volatile type_t * const> {
        using result = type_t * const;
    };

    template<class type_t>
    struct meta<volatile const type_t * const> {
        using result = type_t * const;
    };

    template<class type>
    using remove_volatile = typename meta<type>::result;
}

#endif

xexport(mixc::meta_remove_volatile::remove_volatile)